package com.yuw.udpsocket;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.Socket;

public class ServerThread extends Thread {
	
	// 服务器DatagramSocket
		// 注意：服务器DatagramSocket监听的端口要和客户端的端口号一致，否则无法建立来接
		private DatagramSocket ssocket;

		@Override
		public void run() {
			try {
				// 初始化服务器 的 DatagramSocket,需要制定端口号，因为服务器端的DatagramSocket需要在服务器上制定的端口号对客户端的请求进行监听
				ssocket = new DatagramSocket(8890);

				// 服务器端的DatagramSocket创建一个用于接收客户端的DatagramPacket
				// 也就是，服务器端使用DatagramPacket来接收客户端发送的消息内容
				// 创建一个DatagramPacket使用的字节数组
				byte[] buf = new byte[1024];
				DatagramPacket dp = new DatagramPacket(buf, buf.length);
				// 使用死循环监听客户端的请求
				while (true) {

					////////// 接收消息/////////////
					// 将客户端发送的消息接收到服务器端的DatagramPacket中
					ssocket.receive(dp);
					// 获取本次接收的信息的字节的个数
					int len = dp.getLength();

					// 把接收到的字节转换为字符串
					String strMsgRecieved = new String(buf, 0, len);

					System.out.println(strMsgRecieved);

					////////// 发送消息/////////////
					// 需要发送的消息
					String strMsgSend = new String("你好客户端，我是服务器端，我已经接收到你的消息了");
					// 将需要发送的消息打包到DatagramPacket数据包中
					DatagramPacket dpSend = new DatagramPacket(strMsgSend.getBytes(),0,strMsgSend.getBytes().length,
							dp.getSocketAddress());
					// 使用DatagramSocket发送数据包到网络
					ssocket.send(dpSend);
					
					// 输出信息
					System.out.println(strMsgSend);
					
				}
				//
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}
}
